home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 June / MacFormat 25.iso / Shareware City / Developers / ICAppSourceKit1.0 / ICWindowGlobals.p < prev    next >
Encoding:
Text File  |  1994-11-06  |  2.9 KB  |  127 lines  |  [TEXT/PJMM]

  1. unit ICWindowGlobals;
  2.  
  3. interface
  4.  
  5.     type
  6.         WindowType = (WT_None, WT_About, WT_Main, WT_Personal, WT_Email, WT_News, WT_FileTransfer, WT_OtherServices, WT_Font, WT_FileMapping, WT_Helper, WT_Last);
  7.  
  8.     const
  9.         item_max = 10;
  10.         whats_max = 11;
  11.  
  12.     type
  13.         WhatRecord = record
  14.                 key: str31;
  15.                 typ: OSType;
  16.                 flags: longInt;
  17.                 data: ptr;
  18.                 spare_data: Ptr;
  19.                 fss: FSSpec;
  20.                 modified: boolean;
  21.             end;
  22.         WhatRecordPtr = ^WhatRecord;
  23.     var
  24.         windowinfo: array[WindowType] of record
  25.                 window: WindowPtr;
  26.                 items: array[1..item_max] of WhatRecordPtr;
  27.                 selected_item: integer;
  28.                 id: integer;
  29.                 position: Point;
  30.             end;
  31.         whatinfo: array[1..whats_max] of record
  32.                 typ: OSType;
  33.                 open: ProcPtr;
  34.                 key: ProcPtr;
  35.                 click: ProcPtr;
  36.                 activate: ProcPtr;
  37.                 idle: ProcPtr;
  38.                 flush: ProcPtr;
  39.                 close: ProcPtr;        (* must be able to call close after successful *or* failed open *)
  40.                 cursor: ProcPtr;
  41.                 cursorid: integer;
  42.             end;
  43.  
  44.     const
  45.         wf_locked = 31;
  46.         wf_locked_mask = $80000000;
  47.  
  48.     function GetSelectedItem (wt: WindowType): integer;
  49.     function GetWindowType (wp: WindowPtr): WindowType;
  50.  
  51.     procedure ProcessAttributes (wt: WindowType; item: integer; attr: longint);
  52.     function IsLocked (wt: WindowType; item: integer): boolean;
  53.     procedure LockedAlert (wt: WindowType; item: integer);
  54.  
  55.     procedure InitICWindowGlobals;
  56.  
  57. implementation
  58.  
  59.     uses
  60.         ICTypes, 
  61.  
  62.         ICDocUtils;
  63.  
  64.     function GetSelectedItem (wt: WindowType): integer;
  65.         var
  66.             selected_item: integer;
  67.     begin
  68.         selected_item := windowinfo[wt].selected_item;
  69.         if (selected_item > 0) & (windowinfo[wt].items[selected_item] <> nil) & (windowinfo[wt].items[selected_item]^.typ = 'TEXT') then begin
  70.             GetSelectedItem := selected_item;
  71.         end
  72.         else begin
  73.             GetSelectedItem := -1;
  74.         end; (* if *)
  75.     end; (* GetSelectedItem *)
  76.  
  77.     function GetWindowType (wp: WindowPtr): WindowType;
  78.         var
  79.             i: WindowType;
  80.     begin
  81.         GetWindowType := WT_None;
  82.         if wp <> nil then begin
  83.             for i := WT_None to WT_Last do begin
  84.                 if windowinfo[i].window = wp then begin
  85.                     GetWindowType := i;
  86.                     leave;
  87.                 end;
  88.             end;
  89.         end;
  90.     end;
  91.  
  92.     procedure ProcessAttributes (wt: WindowType; item: integer; attr: longint);
  93.     begin
  94.         if (attr <> ICattr_no_change) & btst(attr, ICattr_locked_bit) then begin
  95.             bset(windowinfo[wt].items[item]^.flags, wf_locked);
  96.         end; (* if *)
  97.     end; (* ProcessAttributes *)
  98.  
  99.     function IsLocked (wt: WindowType; item: integer): boolean;
  100.     begin
  101.         IsLocked := btst(windowinfo[wt].items[item]^.flags, wf_locked) | IsDocLocked;
  102.     end; (* IsLocked *)
  103.  
  104.     var
  105.         last_alert_wt: WindowType;
  106.         last_alert_item: integer;
  107.  
  108.     procedure LockedAlert (wt: WindowType; item: integer);
  109.         var
  110.             junk: integer;
  111.     begin
  112.         if (wt <> last_alert_wt) or (item <> last_alert_item) then begin
  113.             ResetAlrtStage;
  114.             last_alert_wt := wt;
  115.             last_alert_item := item;
  116.         end; (* if *)
  117.         InitCursor;
  118.         junk := StopAlert(143, nil);
  119.     end; (* LockedAlert *)
  120.  
  121.     procedure InitICWindowGlobals;
  122.     begin
  123.         last_alert_wt := WT_None;
  124.         last_alert_item := -1;
  125.     end; (* InitICWindowGlobals *)
  126.  
  127. end.